#include "include.h"

AT(.rodata.func.table)
const u8 func_sort_table[] = {
#if FUNC_MUSIC_EN
    FUNC_MUSIC,
#endif // FUNC_MUSIC_EN

#if FUNC_FMRX_EN
    FUNC_FMRX,
#endif

#if FUNC_BT_EN
    FUNC_BT,
#endif

#if FUNC_BTHID_EN
    FUNC_BTHID,
#endif // FUNC_BTHID

#if FUNC_AUX_EN
    FUNC_AUX,
#endif // FUNC_AUX_EN

#if FUNC_CLOCK_EN
    FUNC_CLOCK,
#endif

#if FUNC_USBDEV_EN
    FUNC_USBDEV,
#endif // FUNC_USBDEV_EN

#if FUNC_SPDIF_EN
    FUNC_SPDIF,
#endif

#if FUNC_HDMI_EN
    FUNC_HDMI,
#endif

#if FUNC_SPEAKER_EN
    FUNC_SPEAKER,
#endif // FUNC_SPEAKER_EN

#if EX_SPIFLASH_SUPPORT && !FUNC_TOM_CAT_EN
    FUNC_EXSPIFLASH_MUSIC,
#endif

#if FUNC_TOM_CAT_EN
    FUNC_TOM_CAT,
#endif

#if FUNC_I2S_EN
    FUNC_I2S,
#endif

#if FUNC_HUART_EN
    FUNC_HUART,
#endif

#if FUNC_IDLE_EN
    FUNC_IDLE,
#endif
};

AT(.text.func)
u8 get_funcs_total(void)
{
    return sizeof(func_sort_table);
}

#if BT_POWER_OPTIMIZE
u8 getcfg_vddif_vset(void){
    return 1;
}
u8 getcfg_vddrf_vset(void){
    return 0;
}
u8 getcfg_mix_vcmsel(void){
    return 2;
}
AT(.text.dac)
u8 getcfg_aud_vrefps(void){
    return  0;
}
u32 getcfg_vddbt_sel(void){
    return 8;     //VDDBT 2.2V
}

u32 getcfg_vddio_sel(void){
   if(FUNC_BT == func_cb.sta) {
       return 3;   //vddio 2.7V
   } else {
       return xcfg_cb.vddio_sel;
   }
}
#else
u32 getcfg_vddbt_sel(void)
{
    return xcfg_cb.vddbt_sel;
}

u32 getcfg_vddio_sel(void)
{
    return xcfg_cb.vddio_sel;
}
#endif



u32 getcfg_vddbt_capless_en(void)
{
    return xcfg_cb.vddbt_capless_en;
}

AT(.com_text.mictrim)
u32 getcfg_mic_bias_method(void)
{
    return xcfg_cb.mic_bias_method;
}

u32 getcfg_mic_bias_resistor(void)
{
    return xcfg_cb.mic_bias_resistor;
}

u8 is_tkey_mul_en(void)
{
    return USER_TKEY_MUL_EN;
}

#if (USER_TKEY_MUL_EN && !TKEY_CH0_EN)
bool tkey_mul_release_ch0(void)
{
    printf("tkey_mul_release_ch0\n");
    return true;
}
#endif
